import path from 'path'
import i18n from '@/i18n'

/**
 * 筛选出可供搜索的路由对象
 * @param routes 当前路由表
 * @param basePath 基础路径，默认为 /
 * @param prefixTitle
 */
export const generateRoutes = (routes, basePath = '/', prefixTitle = []) => {
  // 创建 result 数据
  let res = []
  // 循环 routes 路由
  for (const route of routes) {
    // 创建包含 path 和 title 的 item
    const data = {
      path: path.resolve(basePath, route.path),
      title: [...prefixTitle]
    }

    // 当前存在 meta 时，使用 i18n 解析国际化数据，组合成新的 title
    // 动态路由不允许被搜索
    // 匹配动态路由的正则
    const re = /.*\/:.*/
    if (route.meta && route.meta.title && !re.exec(route.path)) {
      const i18nTitle = i18n.global.t(`msg.route.${route.meta.title}`)
      data.title = [...data.title, i18nTitle]
      // 过滤重复 TODO 不知道源码为啥不会出现重复
      const isFind = res.find(item => {
        return item.path === data.path
      })
      if (!isFind) {
        res.push(data)
      }
    }

    // 存在 children 时，迭代调用
    if (route.children) {
      const tempRoutes = generateRoutes(route.children, data.path, data.title)
      if (tempRoutes.length >= 1) {
        res = [...res, ...tempRoutes]
      }
    }
  }

  return res
}

// 需要数据结构如下：

// [
//   {
//       "path":"/my",
//       "title":[
//           "个人中心"
//       ]
//   },
//   {
//       "path":"/user",
//       "title":[
//           "用户"
//       ]
//   },
//   {
//       "path":"/user/manage",
//       "title":[
//           "用户",
//           "用户管理"
//       ]
//   },
//   {
//       "path":"/user/info",
//       "title":[
//           "用户",
//           "用户信息"
//       ]
//   },
//   {
//       "path":"/article",
//       "title":[
//           "文章"
//       ]
//   },
//   {
//       "path":"/article/ranking",
//       "title":[
//           "文章",
//           "文章排名"
//       ]
//   },
//   {
//       "path":"/article/create",
//       "title":[
//           "文章",
//           "创建文章"
//       ]
//   }
// ]